# Plot ad hoc mnist instances import matplotlib.pyplot as plt import pandas as pd import numpy as np import numpy from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from keras.layers import Flatten from keras.layers.convolutional import Convolution2D from keras.layers.convolutional import MaxPooling2D from keras.utils import np_utils from keras import backend as K K.set_image_dim_ordering('th') # fix random seed for reproducibility seed = 7 np.random.seed(seed) """ # ALTERNATE METHOD USING CSV! #fetch the train data data = pd.read_csv("train.csv") train_data = data.iloc[:,1:].values X_train = np.reshape((train_data),(train_data.shape[0],1,28,28)).astype('float32') y_train = data.iloc[:,0:1].values print X_train.shape print y_train.shape #fetch the test data dataTest = pd.read_csv("test.csv") test_data = dataTest.values X_test = np.reshape((test_data),(test_data.shape[0],1,28,28)).astype('float32') #print X_test.shape """ # METHOD USING KERAS! """ #[pixels][width][height] ::: For grayscale, pixel = 1, RGB, pixel = 3 """ from keras.datasets import mnist (X_train, y_train), (X_test, y_test) = mnist.load_data() # reshape to be [samples][pixels][width][height] X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32') X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32') #print X_train.shape # normalize inputs from 0-255 to 0-1 X_train = X_train / 255 X_test = X_test / 255 #print y_train.shape #print y_test.shape # one hot encode outputs y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) num_classes = y_test.shape[1] #print y_train #print y_train.shape #print y_test.shape ############################################################################################################### """ #ADAM gradient descent algorithm is used to learn the weights. """ def larger_model(): # create model model = Sequential() model.add(Convolution2D(30, 5, 5, border_mode='valid', input_shape=(1, 28, 28), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(15, 3, 3, activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(50, activation='relu')) model.add(Dense(num_classes, activation='softmax')) # Compile model model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return model # build the model model = larger_model() # Fit the model model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=100, batch_size=200, verbose=2) # Final evaluation of the model scores = model.evaluate(X_test, y_test, verbose=0) print("Baseline Error: %.2f%%" % (100-scores[1]*100)) #storing the model in an h5 file model.save('my_model.h5')